angular.module('myUtil', [])
    .provider('httpUtil', function () {
        this.$get = function ($http) {
            var service = {
                httpSend: function (url, params, successFun) {
                    var req = {
                        method: 'post',
                        url: url,
                        headers: {
                            'Content-Type': 'text/html;charset=UTF-8'
                        },
                        dataType:'json',
                        data: params
                    };
                    $http(req).success(function (data, status, headers, config) {
                        //alert("请求数据成功！\ndate:"+ data + "\nstatus:" + status + "\nheaders:" + headers + "\nconfig:" + config);
                        successFun(data);
                    }).error(function (data, status, headers, config) {
                        //alert("请求数据失败！\ndate:"+ data + "\nstatus:" + status + "\nheaders:" + headers + "\nconfig:" + config);
                        alert(data.msg);
                    });
                }
            };
            return service;
        }
    })
    .provider('fileUtil', function () {
        this.$get = function () {
            var service = {
                /**
                 * fileUpload: function (url, fileElementId, params, successFun) {
                 * @param url 上传访问的action
                 * @param fileElementId 上传文件标签的id
                 * @param params 上传可以携带的参数
                 * @param successFun 上传成功的回调函数
                 */
                fileUpload: function (url, fileElementId, successFun, failFun) {
                    var $ = jQuery,
                        $list = $('#thelist'),
                        $btn = $('#ctlBtn'),
                        state = 'pending',
                        uploader;

                    uploader = WebUploader.create({
                        // 不压缩image
                        resize: true,
                        // 自动上传。
                        auto: true,
                        // swf文件路径
                        swf: 'lib/webuploader-0.1.5/Uploader.swf',
                        // 文件接收服务端。
                        server: url,
                        // 选择文件的按钮。可选。
                        // 内部根据当前运行是创建，可能是input元素，也可能是flash.
                        pick: '#' + fileElementId
                    });
                    // 当有文件添加进来的时候
                    uploader.on('fileQueued', function(file ) {
                    });
                    // 文件上传过程中创建进度条实时显示。
                    uploader.on('uploadProgress', function (file, percentage) {
                        var $li = $('#uploadProgressId'),
                            $percent = $li.find('.progress .progress-bar');
                        // 避免重复创建
                        if ( !$percent.length ) {
                            $percent = $('<div class="progress progress-striped active">' +
                                '<div class="progress-bar" role="progressbar" style="width: 0%">' +
                                '</div>' +
                                '</div>').appendTo( $li ).find('.progress-bar');
                        }
                        $percent.css( 'width', percentage * 100 + '%' );
                    });
                    // 文件上传成功执行的方法
                    uploader.on('uploadSuccess', function (file) {
                        successFun();
                    });
                    // 文件上传失败执行发方法
                    uploader.on('uploadError', function (file) {
                        failFun();
                    });
                },
                imageUpload: function (url, fileElementId, successFun, failFun) {
                    // 初始化Web Uploader
                    var uploader = WebUploader.create({
                        // 自动上传。
                        auto: true,
                        // swf文件路径
                        swf: 'lib/webuploader-0.1.5/Uploader.swf',
                        // 文件接收服务端。
                        server: url,
                        // 选择文件的按钮。可选。
                        // 内部根据当前运行是创建，可能是input元素，也可能是flash.
                        pick: '#' + fileElementId,
                        // 只允许选择图片，可选。
                        accept: {
                            title: 'Images',
                            extensions: 'gif,jpg,jpeg,bmp,png',
                            mimeTypes: 'image/*'
                        }
                    });
                    // 当有文件添加进来的时候
                    uploader.on('fileQueued', function(file ) {
                    });
                    // 文件上传过程中创建进度条实时显示。
                    uploader.on('uploadProgress', function (file, percentage) {
                        var $li = $('#uploadProgressId'),
                            $percent = $li.find('.progress .progress-bar');
                        // 避免重复创建
                        if ( !$percent.length ) {
                            $percent = $('<div class="progress progress-striped active">' +
                                '<div class="progress-bar" role="progressbar" style="width: 0%">' +
                                '</div>' +
                                '</div>').appendTo( $li ).find('.progress-bar');
                        }
                        $percent.css( 'width', percentage * 100 + '%' );
                    });
                    // 文件上传成功执行的方法
                    uploader.on('uploadSuccess', function (file) {
                        successFun();
                    });
                    // 文件上传失败执行发方法
                    uploader.on('uploadError', function (file) {
                        failFun();
                    });
                },
                fileDownload: function (url, params) {
                    window.location.href = url + "?params=" + params.filePath;
                }
            };
            return service;
        }
    })
    .provider('alertModule', function () {
        this.$get = function () {
            var service = {
                alertMessage: function(msg) {
                    alert(msg);
                }
            };
            return service;
        }
    })
    ;